#!/bin/bash
# 金融数据平台启动脚本

# 定义颜色
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # 无颜色

# 检查环境变量文件
if [ ! -f ".env" ]; then
    echo -e "${RED}错误: .env 文件不存在${NC}"
    echo -e "${YELLOW}请复制 .env.example 文件并修改为你的配置${NC}"
    echo "cp .env.example .env"
    exit 1
fi

# 加载环境变量
set -a
source ./.env
set +a

# 创建日志目录
mkdir -p logs

echo -e "${BLUE}========================================================${NC}"
echo -e "${BLUE}               金融数据平台启动脚本                      ${NC}"
echo -e "${BLUE}========================================================${NC}"

# 检查虚拟环境
if [ ! -d "venv" ]; then
    echo -e "${YELLOW}创建Python虚拟环境...${NC}"
    python -m venv venv
    source venv/bin/activate
    pip install -r requirements.txt
else
    source venv/bin/activate
fi

# 检查数据库
echo -e "${YELLOW}检查数据库连接...${NC}"
python -c "from modules.models.base import engine; print('数据库连接成功')" || { 
    echo -e "${RED}数据库连接失败，请检查数据库配置${NC}"; 
    exit 1; 
}

# 启动Redis（如果已安装）
REDIS_RUNNING=$(pgrep -x redis-server > /dev/null && echo "yes" || echo "no")
if [ "$REDIS_RUNNING" = "no" ]; then
    echo -e "${YELLOW}启动Redis服务...${NC}"
    if command -v redis-server &> /dev/null; then
        redis-server --daemonize yes
    else
        echo -e "${YELLOW}Redis未安装，使用内存作为任务队列后端${NC}"
    fi
fi

# 启动Celery Worker
echo -e "${YELLOW}启动Celery Worker...${NC}"
celery -A modules.tasks.celery_app worker --loglevel=info --concurrency=4 > logs/celery_worker.log 2>&1 &
CELERY_WORKER_PID=$!
echo -e "${GREEN}Celery Worker已启动 (PID: $CELERY_WORKER_PID)${NC}"

# 启动Celery Beat (定时任务调度器)
echo -e "${YELLOW}启动Celery Beat...${NC}"
celery -A modules.tasks.celery_app beat --loglevel=info > logs/celery_beat.log 2>&1 &
CELERY_BEAT_PID=$!
echo -e "${GREEN}Celery Beat已启动 (PID: $CELERY_BEAT_PID)${NC}"

# 启动Flower监控
echo -e "${YELLOW}启动Flower监控...${NC}"
celery -A modules.tasks.celery_app flower --port=5555 > logs/celery_flower.log 2>&1 &
FLOWER_PID=$!
echo -e "${GREEN}Flower监控已启动 (PID: $FLOWER_PID)${NC}"
echo -e "${GREEN}Flower监控界面: http://localhost:5555${NC}"

# 启动Web界面
echo -e "${YELLOW}启动Web服务...${NC}"
python -m modules.web.app > logs/web_server.log 2>&1 &
WEB_PID=$!
echo -e "${GREEN}Web服务已启动 (PID: $WEB_PID)${NC}"
echo -e "${GREEN}Web界面: http://localhost:5000${NC}"

# 启动API服务
echo -e "${YELLOW}启动API服务...${NC}"
uvicorn modules.api.main:app --host 0.0.0.0 --port 8000 > logs/api_server.log 2>&1 &
API_PID=$!
echo -e "${GREEN}API服务已启动 (PID: $API_PID)${NC}"
echo -e "${GREEN}API文档: http://localhost:8000/docs${NC}"

# 保存PID到文件
echo "$CELERY_WORKER_PID $CELERY_BEAT_PID $FLOWER_PID $WEB_PID $API_PID" > .pid

echo -e "${BLUE}========================================================${NC}"
echo -e "${GREEN}金融数据平台已成功启动!${NC}"
echo -e "${YELLOW}使用 ./stop.sh 命令可以停止服务${NC}"
echo -e "${BLUE}========================================================${NC}"